#include "../inc/head.h"

int current_floor = 1; // 当前楼层
int target_floor = 1;  // 目标楼层

// 硬件的初始化
int *init_lcd()
{
    // 打开lcd文件
    int fd_lcd = open("/dev/fb0", O_RDWR);
    if (fd_lcd < 0)
    {
        printf("open file fail\n");
        return NULL;
    }

    // LCD的映射
    int *addr = mmap(NULL,                   // If addr is NULL, then the kernel chooses the  address
                     800 * 480 * 4,          // LCD的大小
                     PROT_READ | PROT_WRITE, // LCD的权限
                     MAP_SHARED,             // LCD的标志量
                     fd_lcd,                 // LCD的文件描述符
                     0);                     // LCD的偏移量
    if (addr == NULL)
    {
        printf("mmap fail\n");
        return NULL;
    }

    return addr;
}
void time_display()
{ 

}
void *button(void *arg)//电梯按钮显示线程
{
    button_display_touch(floor_button, floor_button_response);//响应之前的按钮显示
    return NULL;
}
void *adver(void *arg)//广告播放线程
{
    auto_display(adverimg);
    return NULL;
}
void *floor_thread(void *arg)//楼层显示线程
{
    floor_display(floorimg,arrowimg);
    return NULL;
}
int main(int argc, char *argv[])
{
    // 硬件初始化
    int *addr = init_lcd();

    // 主功能
    pthread_t tid1,tid2,tid3;
    pthread_create(&tid1, NULL, button, NULL);//电梯按钮线程
    pthread_create(&tid2, NULL, adver, NULL);//广告播放线程
    pthread_create(&tid3, NULL, floor_thread, NULL);//楼层显示线程
    
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    pthread_join(tid3, NULL);

    // LCD映射的释放
    munmap(addr, 800 * 480 * 4);

    return 0;
}